package edu.pe.cayetano.view.action;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.RowSetDynaClass;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.model.bean.UsuarioBean;
import edu.pe.cayetano.model.bo.EstadoBO;
import edu.pe.cayetano.model.bo.PerfilBO;
import edu.pe.cayetano.model.bo.UsuarioBO;
import edu.pe.cayetano.seccd.constantes.ConstantesListas;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.util.EscribeLog;
import edu.pe.cayetano.util.Utilitario;
import edu.pe.cayetano.util.UtilitarioSession;

public class UsuarioAction extends BaseAction{
	
	private String page=ConstantesSECCD.EXITO;
	
	public ActionForward listarUsuarios(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		String 			campo 	 	= "todos";
		BResult			ret			= new BResult();
		UsuarioBO		usuarioBO 	= new UsuarioBO();
		RowSetDynaClass 		resultSet = null;
		try {
			HttpSession session = request.getSession(false);
			ret = usuarioBO.listarUsuario();
			if(ret.getCode()==0 && ret.getObject()!=null){
				page="lista";
				resultSet	= (RowSetDynaClass)ret.getObject();
				UtilitarioSession.eliminaParametrosBusquedaGenerico(session);
				session.setAttribute("results",resultSet);
				session.setAttribute("optCampo",campo);
				session.setAttribute("operacion","listado");
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","listarUsuarios",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_USUARIO_LISTAR);
				mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","listarUsuarios",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_USUARIO_LISTAR);
			mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}

	public ActionForward buscarUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult				ret			= new BResult();
		UsuarioBO			usuarioBO 	= new UsuarioBO();
		RowSetDynaClass 	resultSet 	= null;
		try {
			HttpSession 		session 	= request.getSession(false);
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			
			ret = usuarioBO.buscarUsuario(dyna);
			if(ret.getCode()==0 && ret.getObject()!=null){
				page="lista";
				if(((String)dyna.get("optCampo")).equalsIgnoreCase(ConstantesSECCD.CRITERIO_TODOS)){
					dyna.set("criterio", "");
				}
				resultSet	= (RowSetDynaClass)ret.getObject();
				session.setAttribute("results",resultSet);
				session.setAttribute("optCampo",(String)dyna.get("optCampo"));
				session.setAttribute("criterio",(String)dyna.get("criterio"));
				session.setAttribute("operacion",(String)dyna.get("operacion"));
			}else{
				page=ConstantesSECCD.ERROR;
				mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_BUSQUEDA,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_BUSQUEDA,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}
	
	public ActionForward cargaInsertar(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult					retP		= new BResult();
		PerfilBO				perfilBO    = new PerfilBO();
		try{
			retP = perfilBO.getPerfiles();
			if(retP.getCode()==0 && retP.getObject()!=null){
				page="cargar";
				request.setAttribute(ConstantesListas.LISTA_PERFILES, (ArrayList<?>)retP.getObject());
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,retP.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch(Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_CARGA_EDITA_USUARIO);
			mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}

	public ActionForward cargaEditaUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		System.out.println("[UsuarioAction] ejecutando el metodo cargaEditaUsuario");
		BResult					ret			= new BResult();
		UsuarioBO				usuarioBO 	= null;
		try {
			usuarioBO 	= new UsuarioBO();
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = usuarioBO.buscarUsuarioEspecifico(dyna);
			if(ret.getCode()==0 && ret.getObject()!=null){
				BResult					retP		= new BResult();
				PerfilBO				perfilBO    = new PerfilBO();
				retP = perfilBO.getPerfiles();
				if(retP.getCode()==0 && retP.getObject()!=null){
					BResult					retE		= new BResult();
					EstadoBO				estadoBO    = new EstadoBO();
					retE = estadoBO.getEstados(ConstantesSECCD.OPT_USUARIO);
					if(retE.getCode()==0 && retE.getObject()!=null){
						page="cargar";
						EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.EXITO,ConstantesSECCD.EXITO_CARGA_EDITA_USUARIO);
						request.setAttribute(ConstantesListas.LISTA_ESTADOS, (ArrayList<?>)retE.getObject());
						request.setAttribute(ConstantesListas.LISTA_PERFILES, (ArrayList<?>)retP.getObject());
						request.setAttribute("usuarioTO", (UsuarioBean)ret.getObject());
						request.setAttribute("perfil_usuario", ((UsuarioBean)ret.getObject()).getPerfil());
						request.setAttribute("estado_usuario", ((UsuarioBean)ret.getObject()).getEstado());
					}
					else{
						page=ConstantesSECCD.ERROR;
						EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ret.getMessage());
						mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
					}			
				}
				else{
					page=ConstantesSECCD.ERROR;
					EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ret.getMessage());
					mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
				}			
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","cargaEditaUsuario",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_CARGA_EDITA_USUARIO);
			mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_LISTAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}
	
	public ActionForward grabaEditaUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult					ret			= new BResult();
		UsuarioBO				usuarioBO 	= null;
		try {
			usuarioBO 	= new UsuarioBO();
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = usuarioBO.grabaEditaUsuario(dyna);
			if(ret.getCode()==0){
				page=ConstantesSECCD.EXITO;
				EscribeLog.escribeLog("UsuarioAction","grabaEditaUsuario",ConstantesSECCD.EXITO,ConstantesSECCD.EXITO_EDITA_USUARIO);
				mostrarMensaje(request,ConstantesSECCD.EXITO_EDITA_USUARIO,new String[0],"listarUsuarios.do","listarUsuarios");
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","grabaEditaUsuario",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_USUARIO_LISTAR);
				mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_EDITAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","grabaEditaUsuario",ConstantesSECCD.ERROR,e.getMessage());
			mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_EDITAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}

	public ActionForward grabaInsertaUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult					ret			= new BResult();
		UsuarioBO				usuarioBO 	= null;
		try {
			usuarioBO 	= new UsuarioBO();
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = usuarioBO.grabaInsertaUsuario(dyna);
			if(ret.getCode()==0){
				page=ConstantesSECCD.EXITO;
				EscribeLog.escribeLog("UsuarioAction","grabaInsertaUsuario",ConstantesSECCD.EXITO,ConstantesSECCD.EXITO_USUARIO_INSERTAR);
				mostrarMensaje(request,ConstantesSECCD.EXITO_USUARIO_INSERTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("UsuarioAction","grabaInsertaUsuario",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_USUARIO_INSERTAR);
				mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_INSERTAR,new String[0],"listarUsuarios.do","listarUsuarios");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("UsuarioAction","grabaEditaUsuario",ConstantesSECCD.ERROR,e.getMessage());
			mostrarMensaje(request,ConstantesSECCD.ERROR_USUARIO_INSERTAR,new String[0],"listarUsuarios.do","listarUsuarios");
		}
		return mapping.findForward(page);	
	}
	
	
	public ActionForward volverUsuario(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		page="lista";
		return mapping.findForward(page);	
	}
}
